package builder;

import java.util.ArrayList;
import java.util.List;

public class Document {
    private String title;          // 标题（必选）
    private String content;        // 正文（必选）
    private List<Image> images;    // 图片（可选）
    private List<Attachment> attachments; // 附件（可选）
    private String type;           // 文档类型（markdown/html）

    // 内部类：图片
    public static class Image {
        private String url;
        private String alt;
        public Image(String url, String alt) {
            this.url = url;
            this.alt = alt;
        }
        // Getter
        public String getUrl() { return url; }
        public String getAlt() { return alt; }
    }

    // 内部类：附件
    public static class Attachment {
        private String name;
        private String path;
        public Attachment(String name, String path) {
            this.name = name;
            this.path = path;
        }
        // Getter
        public String getName() { return name; }
        public String getPath() { return path; }
    }

    // 构造器（私有，仅建造者可调用）
    public Document() {
        this.images = new ArrayList<>();
        this.attachments = new ArrayList<>();
    }

    // Setter（仅建造者可调用）
    public void setTitle(String title) { this.title = title; }
    public void setContent(String content) { this.content = content; }
    public void addImage(Image image) { this.images.add(image); }
    public void addAttachment(Attachment attachment) { this.attachments.add(attachment); }
    public void setType(String type) { this.type = type; }

    // 转换为字符串（根据类型格式化）
    @Override
    public String toString() {
        if ("markdown".equals(type)) {
            return toMarkdown();
        } else if ("html".equals(type)) {
            return toHtml();
        }
        return String.format("标题：%s\n正文：%s\n图片数：%d\n附件数：%d",
                title, content, images.size(), attachments.size());
    }

    // 转换为Markdown
    private String toMarkdown() {
        StringBuilder md = new StringBuilder();
        md.append("# ").append(title).append("\n\n").append(content);
        // 添加图片
        for (Image img : images) {
            md.append("\n![").append(img.getAlt()).append("](").append(img.getUrl()).append(")");
        }
        // 添加附件
        for (Attachment attach : attachments) {
            md.append("\n[").append(attach.getName()).append("](").append(attach.getPath()).append(")");
        }
        return md.toString();
    }

    // 转换为HTML
    private String toHtml() {
        StringBuilder html = new StringBuilder();
        html.append("<h1>").append(title).append("</h1>")
                .append("<p>").append(content).append("</p>");
        // 添加图片
        for (Image img : images) {
            html.append("\n<img src=\"").append(img.getUrl()).append("\" alt=\"").append(img.getAlt()).append("\">");
        }
        // 添加附件
        for (Attachment attach : attachments) {
            html.append("\n<a href=\"").append(attach.getPath()).append("\">").append(attach.getName()).append("</a>");
        }
        return html.toString();
    }

    // 校验必选组件（供建造者调用）
    public boolean isValid() {
        return title != null && !title.isEmpty() && content != null && !content.isEmpty();
    }
}